Image Super-Resolution Using Deep Convolutional Network (Dong et al. 2014) introduced the Super-Resolution Convolutional Neural Network (SR-CNN for short) that can enhance the resolution of original image. SR-CNN is deep convolutional neural network that learns end-to-end mapping of low resolution to high resolution image. In this post, we will dig into the basic principles of SR-CNN, and implement it.

Required Packages

import sys, os
import math
import tensorflow as tf
import numpy as np
import pandas as pd
import cv2
import matplotlib as mpl
import matplotlib.pyplot as plt
import skimage

Version check

print('Python: {}'.format(sys.version))
print('Numpy: {}'.format(np.__version__))
print('Pandas: {}'.format(pd.__version__))
print('OpenCV: {}'.format(cv2.__version__))
print('Tensorflow: {}'.format(tf.__version__))
print('Matplotlib: {}'.format(mpl.__version__))
print('Scikit-Image: {}'.format(skimage.__version__))
Python: 3.7.6 (default, Jan  8 2020, 19:59:22) 
[GCC 7.3.0]
Numpy: 1.18.1
Pandas: 1.0.1
OpenCV: 4.3.0
Tensorflow: 2.2.0
Matplotlib: 3.1.3
Scikit-Image: 0.16.2

Metric Functions

Actually, when we saw the raw image, we cannot make sure that this image is whether high resolution image or not. There are several metrics to measure image quality, and we will use

Defined in Wikipedia, PSNR is an engineering term for the ratio between the maximum possible power of a signal and the power of corrupting noise that affects the fidelity of its representation. As you can see the term "Ratio" in words, it is usually expressed in terms of logarithmic decibel (dB) scale, and has following relation,

$$ \text{MSE} = \frac{1}{mn} \sum_{i=0}^{m-1} \sum_{j=0}^{n-1}[I(i, j) - K(i, j)]^2 $$

Here, $I$ is monochrome image and $K$ is its noisy approximation. Expressed in dB scale,

$$ \begin{aligned} PSNR &= 10 \cdot \log_{10} \Big(\frac{\text{MAX}_I^2}{\text{MSE}}\Big) \\ &= 20 \cdot \log_{10}(\text{MAX}_I) - 10 \cdot \log_{10}(\text{MSE}) \end{aligned} $$

From the formula, Image quality will be better if the PSNR value is high, since maximum pixel value is much higher than MSE value.

And SSIM is a method for predicting the perceived quality, and it is used for measureing the similarity between two images. If this value is close to 1, then two images are identical. Otherwise, two images will be totally different. Think about it that we can increase PSNR while maintaining the SSIM. That maybe works in CNN. So it is required to define these metrics.

Peak Signal-to-Noise Ratio (PSNR)

Note: OpenCV has psnr method (cv2.psnr), but we implement this manually here
def psnr(target, ref):
    # Assume target is RGB/BGR image
    target_data = target.astype(np.float32)
    ref_data = ref.astype(np.float32)
    
    diff = ref_data - target_data
    diff = diff.flatten('C')
    
    rmse = np.sqrt(np.mean(diff ** 2.))
    
    return 20 * np.log10(255. / rmse)

Mean Squared Error (MSE)

def mse(target, ref):
    target_data = target.astype(np.float32)
    ref_data = ref.astype(np.float32)
    err = np.sum((target_data - ref_data) ** 2)
    
    err /= np.float(target_data.shape[0] * target_data.shape[1])
    return err

Strucutural Similarity

Actually, this metrics is already implemented in skimage.

from skimage.metrics import structural_similarity as ssim

After we defined our metrics for measuring image quality, we need to combine whole metrics in one metric.

def compare_images(target, ref):
    scores = []
    scores.append(psnr(target, ref))
    scores.append(mse(target, ref))
    scores.append(ssim(target, ref, multichannel=True))
    return scores

Prepare distorted images via resizing

We need to check the functionality of our metric function, and it requires target and reference image to compare. Thankfully, the original paper published its source code (implemented in Matlab and Caffe) and dataset image in here. So we can use it. For the convenience, I downloaded image folder(named Train and Test) into new directory (dataset\SRCNN_dataset)

Then how can we make distorted image from the raw data. It is just simple. After resize down the original image, resize it again to previous width height, then the resolution will be lower since the pixel information may loss during resize.

def prepare_images(path, factor):
    # Loop through the files in the directory
    for file in os.listdir(path):
        image = cv2.imread(path + '/' + file)
        
        # Find old and new image dimensions
        h, w, c = image.shape
        new_height = int(h / factor)
        new_width = int(w / factor)
        
        # Resize down the image
        image = cv2.resize(image, (new_width, new_height), interpolation=cv2.INTER_LINEAR)
        
        # Resize up the image
        image = cv2.resize(image, (w, h), interpolation=cv2.INTER_LINEAR)
        
        # Save the image
        try:
            os.listdir(path + '/../../resized')
        except:
            os.mkdir(path + '/../../resized')
            
        cv2.imwrite(path + '/../../resized/{}'.format(file), image)
prepare_images('./dataset/SRCNN_dataset/Test/Set14', 2)

Let's see it works.

from PIL import Image
fig, ax = plt.subplots(1, 2, figsize=(15, 10))
ax[0].imshow(Image.open('./dataset/SRCNN_dataset/Test/Set14/barbara.bmp'))
ax[0].title.set_text('Original Image')
ax[1].imshow(Image.open('./dataset/SRCNN_dataset/resized/barbara.bmp'))
ax[1].title.set_text('Resized Image')
plt.show()

Maybe you can see right image is slightly blurred compared with left image. If we cannot make sure, just use metric function that defined previously.

target = cv2.imread('./dataset/SRCNN_dataset/Test/Set14/barbara.bmp')
ref = cv2.imread('./dataset/SRCNN_dataset/resized/barbara.bmp')

metrics = compare_images(target, ref)
print("PSNR: {}".format(metrics[0]))
print("MSE: {}".format(metrics[1]))
print("SSIM: {}".format(metrics[2]))
PSNR: 25.906629181292335
MSE: 500.6551697530864
SSIM: 0.8098632646406401

Actually, there are several transformations for data augmentation, like random crop. Someone made a dataset with h5 format throught script, so we borrow it from there.

# Build train dataset
import h5py

names = sorted(os.listdir('./dataset/SRCNN_dataset/Train'))

data = []
label = []

for name in names:
    fpath = './dataset/SRCNN_dataset/Train/' + name
    hr_img = cv2.imread(fpath, cv2.IMREAD_COLOR)
    hr_img = cv2.cvtColor(hr_img, cv2.COLOR_BGR2YCrCb)
    hr_img = hr_img[:, :, 0]
    shape = hr_img.shape
    
    # resize operation to produce training data and labels
    lr_img = cv2.resize(hr_img, (int(shape[1] / 2), int(shape[0] / 2)))
    lr_img = cv2.resize(lr_img, (shape[1], shape[0]))
    
    width_range = int((shape[0] - 16 * 2) / 16)
    height_range = int((shape[1] - 16 * 2) / 16)
    
    for k in range(width_range):
        for j in range(height_range):
            x = k * 16
            y = j * 16
            
            hr_patch = hr_img[x: x + 32, y: y + 32]
            lr_patch = lr_img[x: x + 32, y: y + 32]
            
            hr_patch = hr_patch.astype(np.float32) / 255.
            lr_patch = lr_patch.astype(np.float32) / 255.
            
            hr = np.zeros((1, 20, 20), dtype=np.double)
            lr = np.zeros((1, 32, 32), dtype=np.double)
            
            hr[0, :, :] = hr_patch[6:-6, 6: -6]
            lr[0, :, :] = lr_patch
            
            label.append(hr)
            data.append(lr)

data = np.array(data, dtype=np.float32)
label = np.array(label, dtype=np.float32)
with h5py.File('train.h5', 'w') as h:
    h.create_dataset('data', data=data, shape=data.shape)
    h.create_dataset('label', data=label, shape=label.shape)
# Build test dataset

names = sorted(os.listdir('./dataset/SRCNN_dataset/Test/Set14'))
nums = len(names)

data_test = np.zeros((nums * 30, 1, 32, 32), dtype=np.double)
label_test = np.zeros((nums * 30, 1, 20, 20), dtype=np.double)

for i, name in enumerate(names):
    fpath = './dataset/SRCNN_dataset/Test/Set14/' + name
    hr_img = cv2.imread(fpath, cv2.IMREAD_COLOR)
    hr_img = cv2.cvtColor(hr_img, cv2.COLOR_BGR2YCrCb)
    hr_img = hr_img[:, :, 0]
    shape = hr_img.shape
    
    # resize operation to produce training data and labels
    lr_img = cv2.resize(hr_img, (int(shape[1] / 2), int(shape[0] / 2)))
    lr_img = cv2.resize(lr_img, (shape[1], shape[0]))
    
    # Produce random crop
    x = np.random.randint(0, min(shape[0], shape[1]) - 32, 30)
    y = np.random.randint(0, min(shape[0], shape[1]) - 32, 30)
    
    for j in range(30):
        lr_patch = lr_img[x[j]:x[j] + 32, y[j]:y[j] + 32]
        hr_patch = hr_img[x[j]:x[j] + 32, y[j]:y[j] + 32]
        
        lr_patch = lr_patch.astype(np.float32) / 255.
        hr_patch = hr_patch.astype(np.float32) / 255.
        
        data_test[i * 30 + j, 0, :, :] = lr_patch
        label_test[i * 30 + j, 0, :, :] = hr_patch[6: -6, 6: -6]
with h5py.File('test.h5', 'w') as h:
    h.create_dataset('data', data=data_test, shape=data_test.shape)
    h.create_dataset('label', data=label_test, shape=label_test.shape)

Build SR-CNN Model

We prepared our dataset into h5 format. We also need to build SR-CNN model using tensorflow. You already know that keras framework is integrated in tensorflow v2.x. So we can implement it with tensorflow-keras model. In this case, we will build it with sequential model.

def model():
    SRCNN = tf.keras.Sequential(name='SRCNN')
    SRCNN.add(tf.keras.layers.Conv2D(filters=128, kernel_size=(9, 9), 
                                     padding='VALID',
                                     use_bias=True,
                                     input_shape=(None, None, 1),
                                     kernel_initializer='glorot_uniform',
                                     activation='relu'))
    SRCNN.add(tf.keras.layers.Conv2D(filters=64, kernel_size=(3, 3),
                                     padding='SAME',
                                     use_bias=True,
                                     kernel_initializer='glorot_uniform',
                                     activation='relu'))
    SRCNN.add(tf.keras.layers.Conv2D(filters=1, kernel_size=(5, 5),
                                     padding='VALID',
                                     use_bias=True,
                                     kernel_initializer='glorot_uniform',
                                     activation='linear'))
    # Optimizer
    optimizer = tf.keras.optimizers.Adam(learning_rate=0.0003)
    
    # Compile model
    SRCNN.compile(optimizer=optimizer, loss='mean_squared_error', metrics=['mean_squared_error'])
    
    return SRCNN

Train the model

Now, it is time to train the model. How does our model look like?

srcnn_model = model()
srcnn_model.summary()
Model: "SRCNN"
_________________________________________________________________
Layer (type)                 Output Shape              Param #   
=================================================================
conv2d (Conv2D)              (None, None, None, 128)   10496     
_________________________________________________________________
conv2d_1 (Conv2D)            (None, None, None, 64)    73792     
_________________________________________________________________
conv2d_2 (Conv2D)            (None, None, None, 1)     1601      
=================================================================
Total params: 85,889
Trainable params: 85,889
Non-trainable params: 0
_________________________________________________________________

Then we load the dataset from prebuilt h5 file. An it will be helpful to define checkpoint.

with h5py.File('./train.h5', 'r') as h:
    data = np.array(h.get('data'))
    label = np.array(h.get('label'))
    X_train = np.transpose(data, (0, 2, 3, 1))
    y_train = np.transpose(label, (0, 2, 3, 1))
    
with h5py.File('./test.h5', 'r') as h:
    data = np.array(h.get('data'))
    label = np.array(h.get('label'))
    X_test = np.transpose(data, (0, 2, 3, 1))
    y_test = np.transpose(label, (0, 2, 3, 1))
    
X_train.shape, y_train.shape, X_test.shape, y_test.shape
((14901, 32, 32, 1), (14901, 20, 20, 1), (420, 32, 32, 1), (420, 20, 20, 1))
checkpoint_path = './srcnn/cp-{epoch:04d}.ckpt'
checkpoint_dir = os.path.dirname(checkpoint_path)
checkpoint = tf.keras.callbacks.ModelCheckpoint(filepath=checkpoint_dir, save_best_only=True,
                                                 save_weights_only=True, verbose=1)
srcnn_model.fit(X_train, y_train, batch_size=64, validation_data=(X_test, y_test), 
                callbacks=[checkpoint], shuffle=True, epochs=200)
Epoch 1/200
233/233 [==============================] - ETA: 0s - loss: 0.0065 - mean_squared_error: 0.0065
Epoch 00001: val_loss improved from inf to 0.00183, saving model to ./srcnn
233/233 [==============================] - 1s 5ms/step - loss: 0.0065 - mean_squared_error: 0.0065 - val_loss: 0.0018 - val_mean_squared_error: 0.0018
Epoch 2/200
224/233 [===========================>..] - ETA: 0s - loss: 0.0014 - mean_squared_error: 0.0014
Epoch 00002: val_loss improved from 0.00183 to 0.00155, saving model to ./srcnn
233/233 [==============================] - 1s 5ms/step - loss: 0.0014 - mean_squared_error: 0.0014 - val_loss: 0.0015 - val_mean_squared_error: 0.0015
Epoch 3/200
229/233 [============================>.] - ETA: 0s - loss: 0.0013 - mean_squared_error: 0.0013
Epoch 00003: val_loss improved from 0.00155 to 0.00148, saving model to ./srcnn
233/233 [==============================] - 1s 5ms/step - loss: 0.0013 - mean_squared_error: 0.0013 - val_loss: 0.0015 - val_mean_squared_error: 0.0015
Epoch 4/200
230/233 [============================>.] - ETA: 0s - loss: 0.0012 - mean_squared_error: 0.0012
Epoch 00004: val_loss improved from 0.00148 to 0.00144, saving model to ./srcnn
233/233 [==============================] - 1s 4ms/step - loss: 0.0012 - mean_squared_error: 0.0012 - val_loss: 0.0014 - val_mean_squared_error: 0.0014
Epoch 5/200
227/233 [============================>.] - ETA: 0s - loss: 0.0012 - mean_squared_error: 0.0012
Epoch 00005: val_loss improved from 0.00144 to 0.00143, saving model to ./srcnn
233/233 [==============================] - 1s 4ms/step - loss: 0.0012 - mean_squared_error: 0.0012 - val_loss: 0.0014 - val_mean_squared_error: 0.0014
Epoch 6/200
229/233 [============================>.] - ETA: 0s - loss: 0.0012 - mean_squared_error: 0.0012
Epoch 00006: val_loss improved from 0.00143 to 0.00142, saving model to ./srcnn
233/233 [==============================] - 1s 4ms/step - loss: 0.0012 - mean_squared_error: 0.0012 - val_loss: 0.0014 - val_mean_squared_error: 0.0014
Epoch 7/200
228/233 [============================>.] - ETA: 0s - loss: 0.0012 - mean_squared_error: 0.0012
Epoch 00007: val_loss improved from 0.00142 to 0.00140, saving model to ./srcnn
233/233 [==============================] - 1s 4ms/step - loss: 0.0012 - mean_squared_error: 0.0012 - val_loss: 0.0014 - val_mean_squared_error: 0.0014
Epoch 8/200
227/233 [============================>.] - ETA: 0s - loss: 0.0012 - mean_squared_error: 0.0012
Epoch 00008: val_loss did not improve from 0.00140
233/233 [==============================] - 1s 4ms/step - loss: 0.0012 - mean_squared_error: 0.0012 - val_loss: 0.0014 - val_mean_squared_error: 0.0014
Epoch 9/200
233/233 [==============================] - ETA: 0s - loss: 0.0011 - mean_squared_error: 0.0011
Epoch 00009: val_loss improved from 0.00140 to 0.00138, saving model to ./srcnn
233/233 [==============================] - 1s 4ms/step - loss: 0.0011 - mean_squared_error: 0.0011 - val_loss: 0.0014 - val_mean_squared_error: 0.0014
Epoch 10/200
225/233 [===========================>..] - ETA: 0s - loss: 0.0011 - mean_squared_error: 0.0011
Epoch 00010: val_loss improved from 0.00138 to 0.00137, saving model to ./srcnn
233/233 [==============================] - 1s 4ms/step - loss: 0.0011 - mean_squared_error: 0.0011 - val_loss: 0.0014 - val_mean_squared_error: 0.0014
Epoch 11/200
231/233 [============================>.] - ETA: 0s - loss: 0.0011 - mean_squared_error: 0.0011
Epoch 00011: val_loss did not improve from 0.00137
233/233 [==============================] - 1s 4ms/step - loss: 0.0011 - mean_squared_error: 0.0011 - val_loss: 0.0014 - val_mean_squared_error: 0.0014
Epoch 12/200
227/233 [============================>.] - ETA: 0s - loss: 0.0011 - mean_squared_error: 0.0011
Epoch 00012: val_loss improved from 0.00137 to 0.00137, saving model to ./srcnn
233/233 [==============================] - 1s 4ms/step - loss: 0.0011 - mean_squared_error: 0.0011 - val_loss: 0.0014 - val_mean_squared_error: 0.0014
Epoch 13/200
232/233 [============================>.] - ETA: 0s - loss: 0.0011 - mean_squared_error: 0.0011
Epoch 00013: val_loss improved from 0.00137 to 0.00136, saving model to ./srcnn
233/233 [==============================] - 1s 4ms/step - loss: 0.0011 - mean_squared_error: 0.0011 - val_loss: 0.0014 - val_mean_squared_error: 0.0014
Epoch 14/200
226/233 [============================>.] - ETA: 0s - loss: 0.0011 - mean_squared_error: 0.0011
Epoch 00014: val_loss did not improve from 0.00136
233/233 [==============================] - 1s 4ms/step - loss: 0.0011 - mean_squared_error: 0.0011 - val_loss: 0.0014 - val_mean_squared_error: 0.0014
Epoch 15/200
228/233 [============================>.] - ETA: 0s - loss: 0.0011 - mean_squared_error: 0.0011
Epoch 00015: val_loss did not improve from 0.00136
233/233 [==============================] - 1s 4ms/step - loss: 0.0011 - mean_squared_error: 0.0011 - val_loss: 0.0014 - val_mean_squared_error: 0.0014
Epoch 16/200
231/233 [============================>.] - ETA: 0s - loss: 0.0011 - mean_squared_error: 0.0011
Epoch 00016: val_loss improved from 0.00136 to 0.00134, saving model to ./srcnn
233/233 [==============================] - 1s 4ms/step - loss: 0.0011 - mean_squared_error: 0.0011 - val_loss: 0.0013 - val_mean_squared_error: 0.0013
Epoch 17/200
225/233 [===========================>..] - ETA: 0s - loss: 0.0011 - mean_squared_error: 0.0011
Epoch 00017: val_loss improved from 0.00134 to 0.00134, saving model to ./srcnn
233/233 [==============================] - 1s 4ms/step - loss: 0.0011 - mean_squared_error: 0.0011 - val_loss: 0.0013 - val_mean_squared_error: 0.0013
Epoch 18/200
223/233 [===========================>..] - ETA: 0s - loss: 0.0011 - mean_squared_error: 0.0011
Epoch 00018: val_loss did not improve from 0.00134
233/233 [==============================] - 1s 4ms/step - loss: 0.0011 - mean_squared_error: 0.0011 - val_loss: 0.0014 - val_mean_squared_error: 0.0014
Epoch 19/200
222/233 [===========================>..] - ETA: 0s - loss: 0.0011 - mean_squared_error: 0.0011
Epoch 00019: val_loss improved from 0.00134 to 0.00133, saving model to ./srcnn
233/233 [==============================] - 1s 4ms/step - loss: 0.0011 - mean_squared_error: 0.0011 - val_loss: 0.0013 - val_mean_squared_error: 0.0013
Epoch 20/200
225/233 [===========================>..] - ETA: 0s - loss: 0.0011 - mean_squared_error: 0.0011
Epoch 00020: val_loss did not improve from 0.00133
233/233 [==============================] - 1s 4ms/step - loss: 0.0011 - mean_squared_error: 0.0011 - val_loss: 0.0013 - val_mean_squared_error: 0.0013
Epoch 21/200
228/233 [============================>.] - ETA: 0s - loss: 0.0011 - mean_squared_error: 0.0011
Epoch 00021: val_loss did not improve from 0.00133
233/233 [==============================] - 1s 4ms/step - loss: 0.0011 - mean_squared_error: 0.0011 - val_loss: 0.0013 - val_mean_squared_error: 0.0013
Epoch 22/200
224/233 [===========================>..] - ETA: 0s - loss: 0.0011 - mean_squared_error: 0.0011
Epoch 00022: val_loss improved from 0.00133 to 0.00132, saving model to ./srcnn
233/233 [==============================] - 1s 4ms/step - loss: 0.0011 - mean_squared_error: 0.0011 - val_loss: 0.0013 - val_mean_squared_error: 0.0013
Epoch 23/200
233/233 [==============================] - ETA: 0s - loss: 0.0011 - mean_squared_error: 0.0011
Epoch 00023: val_loss did not improve from 0.00132
233/233 [==============================] - 1s 4ms/step - loss: 0.0011 - mean_squared_error: 0.0011 - val_loss: 0.0014 - val_mean_squared_error: 0.0014
Epoch 24/200
225/233 [===========================>..] - ETA: 0s - loss: 0.0011 - mean_squared_error: 0.0011
Epoch 00024: val_loss did not improve from 0.00132
233/233 [==============================] - 1s 4ms/step - loss: 0.0011 - mean_squared_error: 0.0011 - val_loss: 0.0013 - val_mean_squared_error: 0.0013
Epoch 25/200
228/233 [============================>.] - ETA: 0s - loss: 0.0011 - mean_squared_error: 0.0011
Epoch 00025: val_loss did not improve from 0.00132
233/233 [==============================] - 1s 4ms/step - loss: 0.0011 - mean_squared_error: 0.0011 - val_loss: 0.0013 - val_mean_squared_error: 0.0013
Epoch 26/200
223/233 [===========================>..] - ETA: 0s - loss: 0.0011 - mean_squared_error: 0.0011
Epoch 00026: val_loss improved from 0.00132 to 0.00132, saving model to ./srcnn
233/233 [==============================] - 1s 5ms/step - loss: 0.0011 - mean_squared_error: 0.0011 - val_loss: 0.0013 - val_mean_squared_error: 0.0013
Epoch 27/200
231/233 [============================>.] - ETA: 0s - loss: 0.0010 - mean_squared_error: 0.0010
Epoch 00027: val_loss did not improve from 0.00132
233/233 [==============================] - 1s 5ms/step - loss: 0.0010 - mean_squared_error: 0.0010 - val_loss: 0.0014 - val_mean_squared_error: 0.0014
Epoch 28/200
233/233 [==============================] - ETA: 0s - loss: 0.0010 - mean_squared_error: 0.0010
Epoch 00028: val_loss did not improve from 0.00132
233/233 [==============================] - 1s 4ms/step - loss: 0.0010 - mean_squared_error: 0.0010 - val_loss: 0.0013 - val_mean_squared_error: 0.0013
Epoch 29/200
224/233 [===========================>..] - ETA: 0s - loss: 0.0010 - mean_squared_error: 0.0010
Epoch 00029: val_loss did not improve from 0.00132
233/233 [==============================] - 1s 5ms/step - loss: 0.0011 - mean_squared_error: 0.0011 - val_loss: 0.0014 - val_mean_squared_error: 0.0014
Epoch 30/200
229/233 [============================>.] - ETA: 0s - loss: 0.0010 - mean_squared_error: 0.0010
Epoch 00030: val_loss did not improve from 0.00132
233/233 [==============================] - 1s 4ms/step - loss: 0.0010 - mean_squared_error: 0.0010 - val_loss: 0.0013 - val_mean_squared_error: 0.0013
Epoch 31/200
227/233 [============================>.] - ETA: 0s - loss: 0.0011 - mean_squared_error: 0.0011
Epoch 00031: val_loss did not improve from 0.00132
233/233 [==============================] - 1s 5ms/step - loss: 0.0011 - mean_squared_error: 0.0011 - val_loss: 0.0014 - val_mean_squared_error: 0.0014
Epoch 32/200
231/233 [============================>.] - ETA: 0s - loss: 0.0010 - mean_squared_error: 0.0010
Epoch 00032: val_loss improved from 0.00132 to 0.00131, saving model to ./srcnn
233/233 [==============================] - 1s 4ms/step - loss: 0.0010 - mean_squared_error: 0.0010 - val_loss: 0.0013 - val_mean_squared_error: 0.0013
Epoch 33/200
222/233 [===========================>..] - ETA: 0s - loss: 0.0010 - mean_squared_error: 0.0010
Epoch 00033: val_loss improved from 0.00131 to 0.00130, saving model to ./srcnn
233/233 [==============================] - 1s 5ms/step - loss: 0.0010 - mean_squared_error: 0.0010 - val_loss: 0.0013 - val_mean_squared_error: 0.0013
Epoch 34/200
232/233 [============================>.] - ETA: 0s - loss: 0.0010 - mean_squared_error: 0.0010
Epoch 00034: val_loss did not improve from 0.00130
233/233 [==============================] - 1s 4ms/step - loss: 0.0010 - mean_squared_error: 0.0010 - val_loss: 0.0013 - val_mean_squared_error: 0.0013
Epoch 35/200
230/233 [============================>.] - ETA: 0s - loss: 0.0010 - mean_squared_error: 0.0010
Epoch 00035: val_loss did not improve from 0.00130
233/233 [==============================] - 1s 4ms/step - loss: 0.0010 - mean_squared_error: 0.0010 - val_loss: 0.0013 - val_mean_squared_error: 0.0013
Epoch 36/200
225/233 [===========================>..] - ETA: 0s - loss: 0.0010 - mean_squared_error: 0.0010
Epoch 00036: val_loss did not improve from 0.00130
233/233 [==============================] - 1s 4ms/step - loss: 0.0010 - mean_squared_error: 0.0010 - val_loss: 0.0013 - val_mean_squared_error: 0.0013
Epoch 37/200
224/233 [===========================>..] - ETA: 0s - loss: 0.0010 - mean_squared_error: 0.0010
Epoch 00037: val_loss did not improve from 0.00130
233/233 [==============================] - 1s 4ms/step - loss: 0.0010 - mean_squared_error: 0.0010 - val_loss: 0.0013 - val_mean_squared_error: 0.0013
Epoch 38/200
226/233 [============================>.] - ETA: 0s - loss: 0.0010 - mean_squared_error: 0.0010
Epoch 00038: val_loss did not improve from 0.00130
233/233 [==============================] - 1s 5ms/step - loss: 0.0010 - mean_squared_error: 0.0010 - val_loss: 0.0013 - val_mean_squared_error: 0.0013
Epoch 39/200
226/233 [============================>.] - ETA: 0s - loss: 0.0010 - mean_squared_error: 0.0010
Epoch 00039: val_loss did not improve from 0.00130
233/233 [==============================] - 1s 4ms/step - loss: 0.0010 - mean_squared_error: 0.0010 - val_loss: 0.0013 - val_mean_squared_error: 0.0013
Epoch 40/200
222/233 [===========================>..] - ETA: 0s - loss: 0.0010 - mean_squared_error: 0.0010
Epoch 00040: val_loss did not improve from 0.00130
233/233 [==============================] - 1s 4ms/step - loss: 0.0010 - mean_squared_error: 0.0010 - val_loss: 0.0013 - val_mean_squared_error: 0.0013
Epoch 41/200
222/233 [===========================>..] - ETA: 0s - loss: 0.0010 - mean_squared_error: 0.0010
Epoch 00041: val_loss did not improve from 0.00130
233/233 [==============================] - 1s 4ms/step - loss: 0.0010 - mean_squared_error: 0.0010 - val_loss: 0.0013 - val_mean_squared_error: 0.0013
Epoch 42/200
225/233 [===========================>..] - ETA: 0s - loss: 0.0010 - mean_squared_error: 0.0010
Epoch 00042: val_loss did not improve from 0.00130
233/233 [==============================] - 1s 5ms/step - loss: 0.0010 - mean_squared_error: 0.0010 - val_loss: 0.0013 - val_mean_squared_error: 0.0013
Epoch 43/200
227/233 [============================>.] - ETA: 0s - loss: 0.0010 - mean_squared_error: 0.0010
Epoch 00043: val_loss did not improve from 0.00130
233/233 [==============================] - 1s 4ms/step - loss: 0.0010 - mean_squared_error: 0.0010 - val_loss: 0.0013 - val_mean_squared_error: 0.0013
Epoch 44/200
221/233 [===========================>..] - ETA: 0s - loss: 0.0010 - mean_squared_error: 0.0010  
Epoch 00044: val_loss improved from 0.00130 to 0.00130, saving model to ./srcnn
233/233 [==============================] - 1s 4ms/step - loss: 0.0010 - mean_squared_error: 0.0010 - val_loss: 0.0013 - val_mean_squared_error: 0.0013
Epoch 45/200
223/233 [===========================>..] - ETA: 0s - loss: 0.0010 - mean_squared_error: 0.0010
Epoch 00045: val_loss did not improve from 0.00130
233/233 [==============================] - 1s 4ms/step - loss: 0.0010 - mean_squared_error: 0.0010 - val_loss: 0.0013 - val_mean_squared_error: 0.0013
Epoch 46/200
232/233 [============================>.] - ETA: 0s - loss: 9.9973e-04 - mean_squared_error: 9.9973e-04
Epoch 00046: val_loss did not improve from 0.00130
233/233 [==============================] - 1s 4ms/step - loss: 0.0010 - mean_squared_error: 0.0010 - val_loss: 0.0013 - val_mean_squared_error: 0.0013
Epoch 47/200
225/233 [===========================>..] - ETA: 0s - loss: 0.0010 - mean_squared_error: 0.0010  
Epoch 00047: val_loss did not improve from 0.00130
233/233 [==============================] - 1s 4ms/step - loss: 0.0010 - mean_squared_error: 0.0010 - val_loss: 0.0013 - val_mean_squared_error: 0.0013
Epoch 48/200
227/233 [============================>.] - ETA: 0s - loss: 9.9964e-04 - mean_squared_error: 9.9963e-04
Epoch 00048: val_loss improved from 0.00130 to 0.00130, saving model to ./srcnn
233/233 [==============================] - 1s 4ms/step - loss: 9.9896e-04 - mean_squared_error: 9.9896e-04 - val_loss: 0.0013 - val_mean_squared_error: 0.0013
Epoch 49/200
230/233 [============================>.] - ETA: 0s - loss: 9.9982e-04 - mean_squared_error: 9.9982e-04
Epoch 00049: val_loss did not improve from 0.00130
233/233 [==============================] - 1s 4ms/step - loss: 9.9806e-04 - mean_squared_error: 9.9806e-04 - val_loss: 0.0013 - val_mean_squared_error: 0.0013
Epoch 50/200
229/233 [============================>.] - ETA: 0s - loss: 9.9787e-04 - mean_squared_error: 9.9787e-04
Epoch 00050: val_loss did not improve from 0.00130
233/233 [==============================] - 1s 4ms/step - loss: 9.9645e-04 - mean_squared_error: 9.9646e-04 - val_loss: 0.0013 - val_mean_squared_error: 0.0013
Epoch 51/200
224/233 [===========================>..] - ETA: 0s - loss: 9.9258e-04 - mean_squared_error: 9.9258e-04
Epoch 00051: val_loss improved from 0.00130 to 0.00129, saving model to ./srcnn
233/233 [==============================] - 1s 4ms/step - loss: 9.9372e-04 - mean_squared_error: 9.9372e-04 - val_loss: 0.0013 - val_mean_squared_error: 0.0013
Epoch 52/200
227/233 [============================>.] - ETA: 0s - loss: 9.9420e-04 - mean_squared_error: 9.9420e-04
Epoch 00052: val_loss did not improve from 0.00129
233/233 [==============================] - 1s 5ms/step - loss: 9.9246e-04 - mean_squared_error: 9.9246e-04 - val_loss: 0.0013 - val_mean_squared_error: 0.0013
Epoch 53/200
228/233 [============================>.] - ETA: 0s - loss: 9.9621e-04 - mean_squared_error: 9.9621e-04
Epoch 00053: val_loss did not improve from 0.00129
233/233 [==============================] - 1s 5ms/step - loss: 9.9602e-04 - mean_squared_error: 9.9602e-04 - val_loss: 0.0013 - val_mean_squared_error: 0.0013
Epoch 54/200
227/233 [============================>.] - ETA: 0s - loss: 9.8641e-04 - mean_squared_error: 9.8641e-04
Epoch 00054: val_loss did not improve from 0.00129
233/233 [==============================] - 1s 5ms/step - loss: 9.8548e-04 - mean_squared_error: 9.8548e-04 - val_loss: 0.0013 - val_mean_squared_error: 0.0013
Epoch 55/200
230/233 [============================>.] - ETA: 0s - loss: 9.8836e-04 - mean_squared_error: 9.8836e-04
Epoch 00055: val_loss did not improve from 0.00129
233/233 [==============================] - 1s 5ms/step - loss: 9.8764e-04 - mean_squared_error: 9.8764e-04 - val_loss: 0.0013 - val_mean_squared_error: 0.0013
Epoch 56/200
224/233 [===========================>..] - ETA: 0s - loss: 9.8758e-04 - mean_squared_error: 9.8758e-04
Epoch 00056: val_loss did not improve from 0.00129
233/233 [==============================] - 1s 5ms/step - loss: 9.8451e-04 - mean_squared_error: 9.8451e-04 - val_loss: 0.0013 - val_mean_squared_error: 0.0013
Epoch 57/200
226/233 [============================>.] - ETA: 0s - loss: 9.8365e-04 - mean_squared_error: 9.8365e-04
Epoch 00057: val_loss did not improve from 0.00129
233/233 [==============================] - 1s 5ms/step - loss: 9.8207e-04 - mean_squared_error: 9.8207e-04 - val_loss: 0.0013 - val_mean_squared_error: 0.0013
Epoch 58/200
227/233 [============================>.] - ETA: 0s - loss: 9.8176e-04 - mean_squared_error: 9.8176e-04
Epoch 00058: val_loss did not improve from 0.00129
233/233 [==============================] - 1s 5ms/step - loss: 9.8264e-04 - mean_squared_error: 9.8264e-04 - val_loss: 0.0013 - val_mean_squared_error: 0.0013
Epoch 59/200
229/233 [============================>.] - ETA: 0s - loss: 9.8586e-04 - mean_squared_error: 9.8586e-04
Epoch 00059: val_loss did not improve from 0.00129
233/233 [==============================] - 1s 5ms/step - loss: 9.8849e-04 - mean_squared_error: 9.8849e-04 - val_loss: 0.0013 - val_mean_squared_error: 0.0013
Epoch 60/200
233/233 [==============================] - ETA: 0s - loss: 9.7605e-04 - mean_squared_error: 9.7605e-04
Epoch 00060: val_loss did not improve from 0.00129
233/233 [==============================] - 1s 4ms/step - loss: 9.7605e-04 - mean_squared_error: 9.7605e-04 - val_loss: 0.0013 - val_mean_squared_error: 0.0013
Epoch 61/200
223/233 [===========================>..] - ETA: 0s - loss: 9.7447e-04 - mean_squared_error: 9.7447e-04
Epoch 00061: val_loss did not improve from 0.00129
233/233 [==============================] - 1s 5ms/step - loss: 9.7559e-04 - mean_squared_error: 9.7559e-04 - val_loss: 0.0013 - val_mean_squared_error: 0.0013
Epoch 62/200
229/233 [============================>.] - ETA: 0s - loss: 9.7212e-04 - mean_squared_error: 9.7212e-04
Epoch 00062: val_loss improved from 0.00129 to 0.00129, saving model to ./srcnn
233/233 [==============================] - 1s 5ms/step - loss: 9.7468e-04 - mean_squared_error: 9.7468e-04 - val_loss: 0.0013 - val_mean_squared_error: 0.0013
Epoch 63/200
230/233 [============================>.] - ETA: 0s - loss: 9.7546e-04 - mean_squared_error: 9.7547e-04
Epoch 00063: val_loss did not improve from 0.00129
233/233 [==============================] - 1s 4ms/step - loss: 9.7483e-04 - mean_squared_error: 9.7483e-04 - val_loss: 0.0013 - val_mean_squared_error: 0.0013
Epoch 64/200
223/233 [===========================>..] - ETA: 0s - loss: 9.7315e-04 - mean_squared_error: 9.7315e-04
Epoch 00064: val_loss did not improve from 0.00129
233/233 [==============================] - 1s 5ms/step - loss: 9.7323e-04 - mean_squared_error: 9.7323e-04 - val_loss: 0.0013 - val_mean_squared_error: 0.0013
Epoch 65/200
228/233 [============================>.] - ETA: 0s - loss: 9.8461e-04 - mean_squared_error: 9.8461e-04
Epoch 00065: val_loss did not improve from 0.00129
233/233 [==============================] - 1s 5ms/step - loss: 9.8119e-04 - mean_squared_error: 9.8119e-04 - val_loss: 0.0013 - val_mean_squared_error: 0.0013
Epoch 66/200
223/233 [===========================>..] - ETA: 0s - loss: 9.6388e-04 - mean_squared_error: 9.6388e-04
Epoch 00066: val_loss did not improve from 0.00129
233/233 [==============================] - 1s 5ms/step - loss: 9.6725e-04 - mean_squared_error: 9.6725e-04 - val_loss: 0.0013 - val_mean_squared_error: 0.0013
Epoch 67/200
229/233 [============================>.] - ETA: 0s - loss: 9.7034e-04 - mean_squared_error: 9.7034e-04
Epoch 00067: val_loss did not improve from 0.00129
233/233 [==============================] - 1s 4ms/step - loss: 9.6803e-04 - mean_squared_error: 9.6803e-04 - val_loss: 0.0013 - val_mean_squared_error: 0.0013
Epoch 68/200
233/233 [==============================] - ETA: 0s - loss: 9.6952e-04 - mean_squared_error: 9.6952e-04
Epoch 00068: val_loss did not improve from 0.00129
233/233 [==============================] - 1s 4ms/step - loss: 9.6952e-04 - mean_squared_error: 9.6952e-04 - val_loss: 0.0014 - val_mean_squared_error: 0.0014
Epoch 69/200
223/233 [===========================>..] - ETA: 0s - loss: 9.6658e-04 - mean_squared_error: 9.6658e-04
Epoch 00069: val_loss did not improve from 0.00129
233/233 [==============================] - 1s 5ms/step - loss: 9.6640e-04 - mean_squared_error: 9.6640e-04 - val_loss: 0.0013 - val_mean_squared_error: 0.0013
Epoch 70/200
223/233 [===========================>..] - ETA: 0s - loss: 9.6168e-04 - mean_squared_error: 9.6168e-04
Epoch 00070: val_loss did not improve from 0.00129
233/233 [==============================] - 1s 4ms/step - loss: 9.6345e-04 - mean_squared_error: 9.6345e-04 - val_loss: 0.0013 - val_mean_squared_error: 0.0013
Epoch 71/200
222/233 [===========================>..] - ETA: 0s - loss: 9.6029e-04 - mean_squared_error: 9.6029e-04
Epoch 00071: val_loss did not improve from 0.00129
233/233 [==============================] - 1s 4ms/step - loss: 9.6152e-04 - mean_squared_error: 9.6152e-04 - val_loss: 0.0013 - val_mean_squared_error: 0.0013
Epoch 72/200
224/233 [===========================>..] - ETA: 0s - loss: 9.5576e-04 - mean_squared_error: 9.5576e-04
Epoch 00072: val_loss did not improve from 0.00129
233/233 [==============================] - 1s 4ms/step - loss: 9.6025e-04 - mean_squared_error: 9.6025e-04 - val_loss: 0.0013 - val_mean_squared_error: 0.0013
Epoch 73/200
222/233 [===========================>..] - ETA: 0s - loss: 9.6133e-04 - mean_squared_error: 9.6133e-04
Epoch 00073: val_loss did not improve from 0.00129
233/233 [==============================] - 1s 4ms/step - loss: 9.5967e-04 - mean_squared_error: 9.5967e-04 - val_loss: 0.0013 - val_mean_squared_error: 0.0013
Epoch 74/200
230/233 [============================>.] - ETA: 0s - loss: 9.6177e-04 - mean_squared_error: 9.6178e-04
Epoch 00074: val_loss improved from 0.00129 to 0.00129, saving model to ./srcnn
233/233 [==============================] - 1s 4ms/step - loss: 9.6132e-04 - mean_squared_error: 9.6133e-04 - val_loss: 0.0013 - val_mean_squared_error: 0.0013
Epoch 75/200
229/233 [============================>.] - ETA: 0s - loss: 9.5960e-04 - mean_squared_error: 9.5960e-04
Epoch 00075: val_loss did not improve from 0.00129
233/233 [==============================] - 1s 4ms/step - loss: 9.5858e-04 - mean_squared_error: 9.5858e-04 - val_loss: 0.0013 - val_mean_squared_error: 0.0013
Epoch 76/200
226/233 [============================>.] - ETA: 0s - loss: 9.5684e-04 - mean_squared_error: 9.5684e-04
Epoch 00076: val_loss did not improve from 0.00129
233/233 [==============================] - 1s 4ms/step - loss: 9.5647e-04 - mean_squared_error: 9.5647e-04 - val_loss: 0.0013 - val_mean_squared_error: 0.0013
Epoch 77/200
231/233 [============================>.] - ETA: 0s - loss: 9.5176e-04 - mean_squared_error: 9.5176e-04
Epoch 00077: val_loss did not improve from 0.00129
233/233 [==============================] - 1s 5ms/step - loss: 9.5279e-04 - mean_squared_error: 9.5279e-04 - val_loss: 0.0013 - val_mean_squared_error: 0.0013
Epoch 78/200
229/233 [============================>.] - ETA: 0s - loss: 9.5735e-04 - mean_squared_error: 9.5735e-04
Epoch 00078: val_loss did not improve from 0.00129
233/233 [==============================] - 1s 5ms/step - loss: 9.6074e-04 - mean_squared_error: 9.6074e-04 - val_loss: 0.0013 - val_mean_squared_error: 0.0013
Epoch 79/200
223/233 [===========================>..] - ETA: 0s - loss: 9.5250e-04 - mean_squared_error: 9.5250e-04
Epoch 00079: val_loss did not improve from 0.00129
233/233 [==============================] - 1s 5ms/step - loss: 9.5130e-04 - mean_squared_error: 9.5130e-04 - val_loss: 0.0013 - val_mean_squared_error: 0.0013
Epoch 80/200
227/233 [============================>.] - ETA: 0s - loss: 9.5450e-04 - mean_squared_error: 9.5450e-04
Epoch 00080: val_loss did not improve from 0.00129
233/233 [==============================] - 1s 5ms/step - loss: 9.5527e-04 - mean_squared_error: 9.5527e-04 - val_loss: 0.0013 - val_mean_squared_error: 0.0013
Epoch 81/200
229/233 [============================>.] - ETA: 0s - loss: 9.5297e-04 - mean_squared_error: 9.5297e-04
Epoch 00081: val_loss did not improve from 0.00129
233/233 [==============================] - 1s 5ms/step - loss: 9.4884e-04 - mean_squared_error: 9.4884e-04 - val_loss: 0.0013 - val_mean_squared_error: 0.0013
Epoch 82/200
233/233 [==============================] - ETA: 0s - loss: 9.5038e-04 - mean_squared_error: 9.5038e-04
Epoch 00082: val_loss did not improve from 0.00129
233/233 [==============================] - 1s 5ms/step - loss: 9.5038e-04 - mean_squared_error: 9.5038e-04 - val_loss: 0.0013 - val_mean_squared_error: 0.0013
Epoch 83/200
224/233 [===========================>..] - ETA: 0s - loss: 9.4634e-04 - mean_squared_error: 9.4634e-04
Epoch 00083: val_loss did not improve from 0.00129
233/233 [==============================] - 1s 4ms/step - loss: 9.4946e-04 - mean_squared_error: 9.4946e-04 - val_loss: 0.0013 - val_mean_squared_error: 0.0013
Epoch 84/200
224/233 [===========================>..] - ETA: 0s - loss: 9.4893e-04 - mean_squared_error: 9.4893e-04
Epoch 00084: val_loss did not improve from 0.00129
233/233 [==============================] - 1s 5ms/step - loss: 9.4809e-04 - mean_squared_error: 9.4809e-04 - val_loss: 0.0013 - val_mean_squared_error: 0.0013
Epoch 85/200
232/233 [============================>.] - ETA: 0s - loss: 9.4507e-04 - mean_squared_error: 9.4507e-04
Epoch 00085: val_loss did not improve from 0.00129
233/233 [==============================] - 1s 4ms/step - loss: 9.4533e-04 - mean_squared_error: 9.4533e-04 - val_loss: 0.0013 - val_mean_squared_error: 0.0013
Epoch 86/200
224/233 [===========================>..] - ETA: 0s - loss: 9.3863e-04 - mean_squared_error: 9.3863e-04
Epoch 00086: val_loss did not improve from 0.00129
233/233 [==============================] - 1s 5ms/step - loss: 9.4252e-04 - mean_squared_error: 9.4252e-04 - val_loss: 0.0013 - val_mean_squared_error: 0.0013
Epoch 87/200
223/233 [===========================>..] - ETA: 0s - loss: 9.4776e-04 - mean_squared_error: 9.4776e-04
Epoch 00087: val_loss did not improve from 0.00129
233/233 [==============================] - 1s 5ms/step - loss: 9.4541e-04 - mean_squared_error: 9.4541e-04 - val_loss: 0.0013 - val_mean_squared_error: 0.0013
Epoch 88/200
228/233 [============================>.] - ETA: 0s - loss: 9.4146e-04 - mean_squared_error: 9.4146e-04
Epoch 00088: val_loss did not improve from 0.00129
233/233 [==============================] - 1s 5ms/step - loss: 9.4251e-04 - mean_squared_error: 9.4251e-04 - val_loss: 0.0013 - val_mean_squared_error: 0.0013
Epoch 89/200
225/233 [===========================>..] - ETA: 0s - loss: 9.4180e-04 - mean_squared_error: 9.4180e-04
Epoch 00089: val_loss did not improve from 0.00129
233/233 [==============================] - 1s 5ms/step - loss: 9.4181e-04 - mean_squared_error: 9.4181e-04 - val_loss: 0.0013 - val_mean_squared_error: 0.0013
Epoch 90/200
224/233 [===========================>..] - ETA: 0s - loss: 9.4232e-04 - mean_squared_error: 9.4232e-04
Epoch 00090: val_loss did not improve from 0.00129
233/233 [==============================] - 1s 5ms/step - loss: 9.3973e-04 - mean_squared_error: 9.3973e-04 - val_loss: 0.0013 - val_mean_squared_error: 0.0013
Epoch 91/200
230/233 [============================>.] - ETA: 0s - loss: 9.4047e-04 - mean_squared_error: 9.4047e-04
Epoch 00091: val_loss did not improve from 0.00129
233/233 [==============================] - 1s 5ms/step - loss: 9.4205e-04 - mean_squared_error: 9.4205e-04 - val_loss: 0.0013 - val_mean_squared_error: 0.0013
Epoch 92/200
225/233 [===========================>..] - ETA: 0s - loss: 9.4296e-04 - mean_squared_error: 9.4296e-04
Epoch 00092: val_loss did not improve from 0.00129
233/233 [==============================] - 1s 4ms/step - loss: 9.3860e-04 - mean_squared_error: 9.3860e-04 - val_loss: 0.0013 - val_mean_squared_error: 0.0013
Epoch 93/200
227/233 [============================>.] - ETA: 0s - loss: 9.3985e-04 - mean_squared_error: 9.3985e-04
Epoch 00093: val_loss did not improve from 0.00129
233/233 [==============================] - 1s 5ms/step - loss: 9.3856e-04 - mean_squared_error: 9.3856e-04 - val_loss: 0.0013 - val_mean_squared_error: 0.0013
Epoch 94/200
228/233 [============================>.] - ETA: 0s - loss: 9.4027e-04 - mean_squared_error: 9.4027e-04
Epoch 00094: val_loss did not improve from 0.00129
233/233 [==============================] - 1s 4ms/step - loss: 9.3768e-04 - mean_squared_error: 9.3768e-04 - val_loss: 0.0013 - val_mean_squared_error: 0.0013
Epoch 95/200
227/233 [============================>.] - ETA: 0s - loss: 9.3538e-04 - mean_squared_error: 9.3538e-04
Epoch 00095: val_loss did not improve from 0.00129
233/233 [==============================] - 1s 5ms/step - loss: 9.3497e-04 - mean_squared_error: 9.3497e-04 - val_loss: 0.0013 - val_mean_squared_error: 0.0013
Epoch 96/200
233/233 [==============================] - ETA: 0s - loss: 9.3750e-04 - mean_squared_error: 9.3750e-04
Epoch 00096: val_loss did not improve from 0.00129
233/233 [==============================] - 1s 4ms/step - loss: 9.3750e-04 - mean_squared_error: 9.3750e-04 - val_loss: 0.0013 - val_mean_squared_error: 0.0013
Epoch 97/200
232/233 [============================>.] - ETA: 0s - loss: 9.3405e-04 - mean_squared_error: 9.3405e-04
Epoch 00097: val_loss did not improve from 0.00129
233/233 [==============================] - 1s 4ms/step - loss: 9.3321e-04 - mean_squared_error: 9.3321e-04 - val_loss: 0.0013 - val_mean_squared_error: 0.0013
Epoch 98/200
230/233 [============================>.] - ETA: 0s - loss: 9.3118e-04 - mean_squared_error: 9.3118e-04
Epoch 00098: val_loss did not improve from 0.00129
233/233 [==============================] - 1s 5ms/step - loss: 9.3306e-04 - mean_squared_error: 9.3306e-04 - val_loss: 0.0013 - val_mean_squared_error: 0.0013
Epoch 99/200
223/233 [===========================>..] - ETA: 0s - loss: 9.3823e-04 - mean_squared_error: 9.3823e-04
Epoch 00099: val_loss did not improve from 0.00129
233/233 [==============================] - 1s 5ms/step - loss: 9.3709e-04 - mean_squared_error: 9.3709e-04 - val_loss: 0.0013 - val_mean_squared_error: 0.0013
Epoch 100/200
231/233 [============================>.] - ETA: 0s - loss: 9.2984e-04 - mean_squared_error: 9.2984e-04
Epoch 00100: val_loss did not improve from 0.00129
233/233 [==============================] - 1s 4ms/step - loss: 9.2904e-04 - mean_squared_error: 9.2904e-04 - val_loss: 0.0013 - val_mean_squared_error: 0.0013
Epoch 101/200
224/233 [===========================>..] - ETA: 0s - loss: 9.2861e-04 - mean_squared_error: 9.2861e-04
Epoch 00101: val_loss did not improve from 0.00129
233/233 [==============================] - 1s 5ms/step - loss: 9.2977e-04 - mean_squared_error: 9.2977e-04 - val_loss: 0.0013 - val_mean_squared_error: 0.0013
Epoch 102/200
228/233 [============================>.] - ETA: 0s - loss: 9.2596e-04 - mean_squared_error: 9.2596e-04
Epoch 00102: val_loss did not improve from 0.00129
233/233 [==============================] - 1s 5ms/step - loss: 9.2938e-04 - mean_squared_error: 9.2938e-04 - val_loss: 0.0013 - val_mean_squared_error: 0.0013
Epoch 103/200
229/233 [============================>.] - ETA: 0s - loss: 9.3085e-04 - mean_squared_error: 9.3085e-04
Epoch 00103: val_loss did not improve from 0.00129
233/233 [==============================] - 1s 5ms/step - loss: 9.3107e-04 - mean_squared_error: 9.3107e-04 - val_loss: 0.0013 - val_mean_squared_error: 0.0013
Epoch 104/200
228/233 [============================>.] - ETA: 0s - loss: 9.2380e-04 - mean_squared_error: 9.2380e-04
Epoch 00104: val_loss did not improve from 0.00129
233/233 [==============================] - 1s 5ms/step - loss: 9.2585e-04 - mean_squared_error: 9.2585e-04 - val_loss: 0.0013 - val_mean_squared_error: 0.0013
Epoch 105/200
222/233 [===========================>..] - ETA: 0s - loss: 9.2539e-04 - mean_squared_error: 9.2539e-04
Epoch 00105: val_loss did not improve from 0.00129
233/233 [==============================] - 1s 4ms/step - loss: 9.2680e-04 - mean_squared_error: 9.2680e-04 - val_loss: 0.0013 - val_mean_squared_error: 0.0013
Epoch 106/200
225/233 [===========================>..] - ETA: 0s - loss: 9.2805e-04 - mean_squared_error: 9.2805e-04
Epoch 00106: val_loss did not improve from 0.00129
233/233 [==============================] - 1s 5ms/step - loss: 9.2737e-04 - mean_squared_error: 9.2737e-04 - val_loss: 0.0013 - val_mean_squared_error: 0.0013
Epoch 107/200
227/233 [============================>.] - ETA: 0s - loss: 9.2550e-04 - mean_squared_error: 9.2551e-04
Epoch 00107: val_loss did not improve from 0.00129
233/233 [==============================] - 1s 5ms/step - loss: 9.2464e-04 - mean_squared_error: 9.2464e-04 - val_loss: 0.0013 - val_mean_squared_error: 0.0013
Epoch 108/200
223/233 [===========================>..] - ETA: 0s - loss: 9.2339e-04 - mean_squared_error: 9.2339e-04
Epoch 00108: val_loss did not improve from 0.00129
233/233 [==============================] - 1s 5ms/step - loss: 9.2607e-04 - mean_squared_error: 9.2607e-04 - val_loss: 0.0013 - val_mean_squared_error: 0.0013
Epoch 109/200
228/233 [============================>.] - ETA: 0s - loss: 9.2261e-04 - mean_squared_error: 9.2261e-04
Epoch 00109: val_loss did not improve from 0.00129
233/233 [==============================] - 1s 5ms/step - loss: 9.2418e-04 - mean_squared_error: 9.2418e-04 - val_loss: 0.0013 - val_mean_squared_error: 0.0013
Epoch 110/200
230/233 [============================>.] - ETA: 0s - loss: 9.2248e-04 - mean_squared_error: 9.2248e-04
Epoch 00110: val_loss did not improve from 0.00129
233/233 [==============================] - 1s 5ms/step - loss: 9.2219e-04 - mean_squared_error: 9.2219e-04 - val_loss: 0.0013 - val_mean_squared_error: 0.0013
Epoch 111/200
230/233 [============================>.] - ETA: 0s - loss: 9.2073e-04 - mean_squared_error: 9.2073e-04
Epoch 00111: val_loss did not improve from 0.00129
233/233 [==============================] - 1s 5ms/step - loss: 9.1972e-04 - mean_squared_error: 9.1972e-04 - val_loss: 0.0013 - val_mean_squared_error: 0.0013
Epoch 112/200
230/233 [============================>.] - ETA: 0s - loss: 9.2272e-04 - mean_squared_error: 9.2272e-04
Epoch 00112: val_loss did not improve from 0.00129
233/233 [==============================] - 1s 5ms/step - loss: 9.2294e-04 - mean_squared_error: 9.2294e-04 - val_loss: 0.0013 - val_mean_squared_error: 0.0013
Epoch 113/200
225/233 [===========================>..] - ETA: 0s - loss: 9.2437e-04 - mean_squared_error: 9.2437e-04
Epoch 00113: val_loss did not improve from 0.00129
233/233 [==============================] - 1s 4ms/step - loss: 9.2180e-04 - mean_squared_error: 9.2180e-04 - val_loss: 0.0013 - val_mean_squared_error: 0.0013
Epoch 114/200
222/233 [===========================>..] - ETA: 0s - loss: 9.1512e-04 - mean_squared_error: 9.1512e-04
Epoch 00114: val_loss did not improve from 0.00129
233/233 [==============================] - 1s 4ms/step - loss: 9.1622e-04 - mean_squared_error: 9.1622e-04 - val_loss: 0.0013 - val_mean_squared_error: 0.0013
Epoch 115/200
224/233 [===========================>..] - ETA: 0s - loss: 9.2410e-04 - mean_squared_error: 9.2410e-04
Epoch 00115: val_loss did not improve from 0.00129
233/233 [==============================] - 1s 4ms/step - loss: 9.2100e-04 - mean_squared_error: 9.2100e-04 - val_loss: 0.0013 - val_mean_squared_error: 0.0013
Epoch 116/200
226/233 [============================>.] - ETA: 0s - loss: 9.1661e-04 - mean_squared_error: 9.1661e-04
Epoch 00116: val_loss did not improve from 0.00129
233/233 [==============================] - 1s 5ms/step - loss: 9.1854e-04 - mean_squared_error: 9.1854e-04 - val_loss: 0.0013 - val_mean_squared_error: 0.0013
Epoch 117/200
223/233 [===========================>..] - ETA: 0s - loss: 9.1221e-04 - mean_squared_error: 9.1222e-04
Epoch 00117: val_loss did not improve from 0.00129
233/233 [==============================] - 1s 4ms/step - loss: 9.1497e-04 - mean_squared_error: 9.1498e-04 - val_loss: 0.0013 - val_mean_squared_error: 0.0013
Epoch 118/200
231/233 [============================>.] - ETA: 0s - loss: 9.1809e-04 - mean_squared_error: 9.1809e-04
Epoch 00118: val_loss did not improve from 0.00129
233/233 [==============================] - 1s 4ms/step - loss: 9.1666e-04 - mean_squared_error: 9.1666e-04 - val_loss: 0.0013 - val_mean_squared_error: 0.0013
Epoch 119/200
232/233 [============================>.] - ETA: 0s - loss: 9.1583e-04 - mean_squared_error: 9.1583e-04
Epoch 00119: val_loss did not improve from 0.00129
233/233 [==============================] - 1s 4ms/step - loss: 9.1479e-04 - mean_squared_error: 9.1479e-04 - val_loss: 0.0013 - val_mean_squared_error: 0.0013
Epoch 120/200
229/233 [============================>.] - ETA: 0s - loss: 9.1938e-04 - mean_squared_error: 9.1938e-04
Epoch 00120: val_loss did not improve from 0.00129
233/233 [==============================] - 1s 5ms/step - loss: 9.1677e-04 - mean_squared_error: 9.1677e-04 - val_loss: 0.0013 - val_mean_squared_error: 0.0013
Epoch 121/200
233/233 [==============================] - ETA: 0s - loss: 9.1197e-04 - mean_squared_error: 9.1197e-04
Epoch 00121: val_loss did not improve from 0.00129
233/233 [==============================] - 1s 4ms/step - loss: 9.1197e-04 - mean_squared_error: 9.1197e-04 - val_loss: 0.0013 - val_mean_squared_error: 0.0013
Epoch 122/200
221/233 [===========================>..] - ETA: 0s - loss: 9.1460e-04 - mean_squared_error: 9.1460e-04
Epoch 00122: val_loss did not improve from 0.00129
233/233 [==============================] - 1s 4ms/step - loss: 9.1405e-04 - mean_squared_error: 9.1405e-04 - val_loss: 0.0013 - val_mean_squared_error: 0.0013
Epoch 123/200
223/233 [===========================>..] - ETA: 0s - loss: 9.1237e-04 - mean_squared_error: 9.1237e-04
Epoch 00123: val_loss did not improve from 0.00129
233/233 [==============================] - 1s 4ms/step - loss: 9.1296e-04 - mean_squared_error: 9.1296e-04 - val_loss: 0.0013 - val_mean_squared_error: 0.0013
Epoch 124/200
227/233 [============================>.] - ETA: 0s - loss: 9.1294e-04 - mean_squared_error: 9.1294e-04
Epoch 00124: val_loss did not improve from 0.00129
233/233 [==============================] - 1s 4ms/step - loss: 9.1238e-04 - mean_squared_error: 9.1238e-04 - val_loss: 0.0013 - val_mean_squared_error: 0.0013
Epoch 125/200
230/233 [============================>.] - ETA: 0s - loss: 9.1488e-04 - mean_squared_error: 9.1488e-04
Epoch 00125: val_loss did not improve from 0.00129
233/233 [==============================] - 1s 4ms/step - loss: 9.1453e-04 - mean_squared_error: 9.1453e-04 - val_loss: 0.0013 - val_mean_squared_error: 0.0013
Epoch 126/200
223/233 [===========================>..] - ETA: 0s - loss: 9.1308e-04 - mean_squared_error: 9.1308e-04
Epoch 00126: val_loss did not improve from 0.00129
233/233 [==============================] - 1s 5ms/step - loss: 9.0995e-04 - mean_squared_error: 9.0995e-04 - val_loss: 0.0013 - val_mean_squared_error: 0.0013
Epoch 127/200
229/233 [============================>.] - ETA: 0s - loss: 9.0748e-04 - mean_squared_error: 9.0748e-04
Epoch 00127: val_loss did not improve from 0.00129
233/233 [==============================] - 1s 5ms/step - loss: 9.0690e-04 - mean_squared_error: 9.0690e-04 - val_loss: 0.0013 - val_mean_squared_error: 0.0013
Epoch 128/200
225/233 [===========================>..] - ETA: 0s - loss: 9.1047e-04 - mean_squared_error: 9.1047e-04
Epoch 00128: val_loss did not improve from 0.00129
233/233 [==============================] - 1s 5ms/step - loss: 9.0947e-04 - mean_squared_error: 9.0947e-04 - val_loss: 0.0013 - val_mean_squared_error: 0.0013
Epoch 129/200
227/233 [============================>.] - ETA: 0s - loss: 9.0808e-04 - mean_squared_error: 9.0808e-04
Epoch 00129: val_loss did not improve from 0.00129
233/233 [==============================] - 1s 5ms/step - loss: 9.0693e-04 - mean_squared_error: 9.0693e-04 - val_loss: 0.0013 - val_mean_squared_error: 0.0013
Epoch 130/200
232/233 [============================>.] - ETA: 0s - loss: 9.0698e-04 - mean_squared_error: 9.0698e-04
Epoch 00130: val_loss did not improve from 0.00129
233/233 [==============================] - 1s 5ms/step - loss: 9.0645e-04 - mean_squared_error: 9.0645e-04 - val_loss: 0.0013 - val_mean_squared_error: 0.0013
Epoch 131/200
230/233 [============================>.] - ETA: 0s - loss: 9.1002e-04 - mean_squared_error: 9.1002e-04
Epoch 00131: val_loss did not improve from 0.00129
233/233 [==============================] - 1s 5ms/step - loss: 9.0958e-04 - mean_squared_error: 9.0958e-04 - val_loss: 0.0013 - val_mean_squared_error: 0.0013
Epoch 132/200
229/233 [============================>.] - ETA: 0s - loss: 9.0433e-04 - mean_squared_error: 9.0433e-04
Epoch 00132: val_loss did not improve from 0.00129
233/233 [==============================] - 1s 5ms/step - loss: 9.0627e-04 - mean_squared_error: 9.0627e-04 - val_loss: 0.0013 - val_mean_squared_error: 0.0013
Epoch 133/200
230/233 [============================>.] - ETA: 0s - loss: 9.0378e-04 - mean_squared_error: 9.0378e-04
Epoch 00133: val_loss did not improve from 0.00129
233/233 [==============================] - 1s 5ms/step - loss: 9.0318e-04 - mean_squared_error: 9.0318e-04 - val_loss: 0.0013 - val_mean_squared_error: 0.0013
Epoch 134/200
231/233 [============================>.] - ETA: 0s - loss: 9.0642e-04 - mean_squared_error: 9.0642e-04
Epoch 00134: val_loss did not improve from 0.00129
233/233 [==============================] - 1s 5ms/step - loss: 9.0485e-04 - mean_squared_error: 9.0485e-04 - val_loss: 0.0013 - val_mean_squared_error: 0.0013
Epoch 135/200
223/233 [===========================>..] - ETA: 0s - loss: 9.1186e-04 - mean_squared_error: 9.1186e-04
Epoch 00135: val_loss did not improve from 0.00129
233/233 [==============================] - 1s 5ms/step - loss: 9.0506e-04 - mean_squared_error: 9.0506e-04 - val_loss: 0.0013 - val_mean_squared_error: 0.0013
Epoch 136/200
231/233 [============================>.] - ETA: 0s - loss: 9.0471e-04 - mean_squared_error: 9.0471e-04
Epoch 00136: val_loss did not improve from 0.00129
233/233 [==============================] - 1s 5ms/step - loss: 9.0379e-04 - mean_squared_error: 9.0379e-04 - val_loss: 0.0013 - val_mean_squared_error: 0.0013
Epoch 137/200
226/233 [============================>.] - ETA: 0s - loss: 9.0409e-04 - mean_squared_error: 9.0409e-04 ETA: 0s - loss: 9.1046e-04 - 
Epoch 00137: val_loss did not improve from 0.00129
233/233 [==============================] - 1s 4ms/step - loss: 9.0315e-04 - mean_squared_error: 9.0315e-04 - val_loss: 0.0013 - val_mean_squared_error: 0.0013
Epoch 138/200
224/233 [===========================>..] - ETA: 0s - loss: 9.0479e-04 - mean_squared_error: 9.0479e-04
Epoch 00138: val_loss did not improve from 0.00129
233/233 [==============================] - 1s 5ms/step - loss: 9.0330e-04 - mean_squared_error: 9.0330e-04 - val_loss: 0.0013 - val_mean_squared_error: 0.0013
Epoch 139/200
231/233 [============================>.] - ETA: 0s - loss: 8.9938e-04 - mean_squared_error: 8.9938e-04
Epoch 00139: val_loss did not improve from 0.00129
233/233 [==============================] - 1s 4ms/step - loss: 8.9799e-04 - mean_squared_error: 8.9799e-04 - val_loss: 0.0013 - val_mean_squared_error: 0.0013
Epoch 140/200
232/233 [============================>.] - ETA: 0s - loss: 9.0074e-04 - mean_squared_error: 9.0074e-04
Epoch 00140: val_loss did not improve from 0.00129
233/233 [==============================] - 1s 4ms/step - loss: 9.0045e-04 - mean_squared_error: 9.0045e-04 - val_loss: 0.0014 - val_mean_squared_error: 0.0014
Epoch 141/200
230/233 [============================>.] - ETA: 0s - loss: 9.0281e-04 - mean_squared_error: 9.0281e-04
Epoch 00141: val_loss did not improve from 0.00129
233/233 [==============================] - 1s 4ms/step - loss: 9.0410e-04 - mean_squared_error: 9.0410e-04 - val_loss: 0.0013 - val_mean_squared_error: 0.0013
Epoch 142/200
223/233 [===========================>..] - ETA: 0s - loss: 8.9743e-04 - mean_squared_error: 8.9743e-04
Epoch 00142: val_loss did not improve from 0.00129
233/233 [==============================] - 1s 4ms/step - loss: 8.9867e-04 - mean_squared_error: 8.9867e-04 - val_loss: 0.0013 - val_mean_squared_error: 0.0013
Epoch 143/200
230/233 [============================>.] - ETA: 0s - loss: 8.9524e-04 - mean_squared_error: 8.9524e-04
Epoch 00143: val_loss did not improve from 0.00129
233/233 [==============================] - 1s 4ms/step - loss: 8.9668e-04 - mean_squared_error: 8.9668e-04 - val_loss: 0.0013 - val_mean_squared_error: 0.0013
Epoch 144/200
222/233 [===========================>..] - ETA: 0s - loss: 9.0043e-04 - mean_squared_error: 9.0043e-04
Epoch 00144: val_loss did not improve from 0.00129
233/233 [==============================] - 1s 4ms/step - loss: 8.9815e-04 - mean_squared_error: 8.9815e-04 - val_loss: 0.0013 - val_mean_squared_error: 0.0013
Epoch 145/200
229/233 [============================>.] - ETA: 0s - loss: 8.9712e-04 - mean_squared_error: 8.9712e-04
Epoch 00145: val_loss did not improve from 0.00129
233/233 [==============================] - 1s 4ms/step - loss: 8.9620e-04 - mean_squared_error: 8.9620e-04 - val_loss: 0.0013 - val_mean_squared_error: 0.0013
Epoch 146/200
221/233 [===========================>..] - ETA: 0s - loss: 8.9268e-04 - mean_squared_error: 8.9268e-04
Epoch 00146: val_loss did not improve from 0.00129
233/233 [==============================] - 1s 4ms/step - loss: 8.9789e-04 - mean_squared_error: 8.9789e-04 - val_loss: 0.0013 - val_mean_squared_error: 0.0013
Epoch 147/200
232/233 [============================>.] - ETA: 0s - loss: 8.9658e-04 - mean_squared_error: 8.9658e-04
Epoch 00147: val_loss did not improve from 0.00129
233/233 [==============================] - 1s 4ms/step - loss: 8.9689e-04 - mean_squared_error: 8.9689e-04 - val_loss: 0.0013 - val_mean_squared_error: 0.0013
Epoch 148/200
228/233 [============================>.] - ETA: 0s - loss: 8.9267e-04 - mean_squared_error: 8.9267e-04
Epoch 00148: val_loss did not improve from 0.00129
233/233 [==============================] - 1s 4ms/step - loss: 8.9435e-04 - mean_squared_error: 8.9435e-04 - val_loss: 0.0014 - val_mean_squared_error: 0.0014
Epoch 149/200
228/233 [============================>.] - ETA: 0s - loss: 8.9586e-04 - mean_squared_error: 8.9586e-04
Epoch 00149: val_loss did not improve from 0.00129
233/233 [==============================] - 1s 4ms/step - loss: 8.9668e-04 - mean_squared_error: 8.9668e-04 - val_loss: 0.0013 - val_mean_squared_error: 0.0013
Epoch 150/200
228/233 [============================>.] - ETA: 0s - loss: 8.9858e-04 - mean_squared_error: 8.9858e-04
Epoch 00150: val_loss did not improve from 0.00129
233/233 [==============================] - 1s 4ms/step - loss: 8.9728e-04 - mean_squared_error: 8.9728e-04 - val_loss: 0.0013 - val_mean_squared_error: 0.0013
Epoch 151/200
229/233 [============================>.] - ETA: 0s - loss: 8.9375e-04 - mean_squared_error: 8.9375e-04
Epoch 00151: val_loss did not improve from 0.00129
233/233 [==============================] - 1s 4ms/step - loss: 8.9193e-04 - mean_squared_error: 8.9193e-04 - val_loss: 0.0013 - val_mean_squared_error: 0.0013
Epoch 152/200
227/233 [============================>.] - ETA: 0s - loss: 8.9349e-04 - mean_squared_error: 8.9349e-04
Epoch 00152: val_loss did not improve from 0.00129
233/233 [==============================] - 1s 5ms/step - loss: 8.9411e-04 - mean_squared_error: 8.9411e-04 - val_loss: 0.0013 - val_mean_squared_error: 0.0013
Epoch 153/200
229/233 [============================>.] - ETA: 0s - loss: 8.9551e-04 - mean_squared_error: 8.9551e-04
Epoch 00153: val_loss did not improve from 0.00129
233/233 [==============================] - 1s 5ms/step - loss: 8.9192e-04 - mean_squared_error: 8.9192e-04 - val_loss: 0.0013 - val_mean_squared_error: 0.0013
Epoch 154/200
230/233 [============================>.] - ETA: 0s - loss: 8.9178e-04 - mean_squared_error: 8.9178e-04
Epoch 00154: val_loss did not improve from 0.00129
233/233 [==============================] - 1s 4ms/step - loss: 8.9236e-04 - mean_squared_error: 8.9236e-04 - val_loss: 0.0013 - val_mean_squared_error: 0.0013
Epoch 155/200
226/233 [============================>.] - ETA: 0s - loss: 8.9110e-04 - mean_squared_error: 8.9110e-04
Epoch 00155: val_loss did not improve from 0.00129
233/233 [==============================] - 1s 5ms/step - loss: 8.9104e-04 - mean_squared_error: 8.9104e-04 - val_loss: 0.0014 - val_mean_squared_error: 0.0014
Epoch 156/200
222/233 [===========================>..] - ETA: 0s - loss: 8.8685e-04 - mean_squared_error: 8.8685e-04
Epoch 00156: val_loss did not improve from 0.00129
233/233 [==============================] - 1s 4ms/step - loss: 8.8908e-04 - mean_squared_error: 8.8908e-04 - val_loss: 0.0014 - val_mean_squared_error: 0.0014
Epoch 157/200
230/233 [============================>.] - ETA: 0s - loss: 8.8915e-04 - mean_squared_error: 8.8915e-04
Epoch 00157: val_loss did not improve from 0.00129
233/233 [==============================] - 1s 5ms/step - loss: 8.8992e-04 - mean_squared_error: 8.8992e-04 - val_loss: 0.0014 - val_mean_squared_error: 0.0014
Epoch 158/200
231/233 [============================>.] - ETA: 0s - loss: 8.8948e-04 - mean_squared_error: 8.8948e-04
Epoch 00158: val_loss did not improve from 0.00129
233/233 [==============================] - 1s 4ms/step - loss: 8.9103e-04 - mean_squared_error: 8.9103e-04 - val_loss: 0.0014 - val_mean_squared_error: 0.0014
Epoch 159/200
224/233 [===========================>..] - ETA: 0s - loss: 8.8786e-04 - mean_squared_error: 8.8786e-04
Epoch 00159: val_loss did not improve from 0.00129
233/233 [==============================] - 1s 5ms/step - loss: 8.9044e-04 - mean_squared_error: 8.9044e-04 - val_loss: 0.0014 - val_mean_squared_error: 0.0014
Epoch 160/200
233/233 [==============================] - ETA: 0s - loss: 8.8867e-04 - mean_squared_error: 8.8867e-04
Epoch 00160: val_loss did not improve from 0.00129
233/233 [==============================] - 1s 4ms/step - loss: 8.8867e-04 - mean_squared_error: 8.8867e-04 - val_loss: 0.0013 - val_mean_squared_error: 0.0013
Epoch 161/200
232/233 [============================>.] - ETA: 0s - loss: 8.8876e-04 - mean_squared_error: 8.8876e-04
Epoch 00161: val_loss did not improve from 0.00129
233/233 [==============================] - 1s 4ms/step - loss: 8.8794e-04 - mean_squared_error: 8.8794e-04 - val_loss: 0.0014 - val_mean_squared_error: 0.0014
Epoch 162/200
223/233 [===========================>..] - ETA: 0s - loss: 8.8986e-04 - mean_squared_error: 8.8987e-04
Epoch 00162: val_loss did not improve from 0.00129
233/233 [==============================] - 1s 4ms/step - loss: 8.8915e-04 - mean_squared_error: 8.8915e-04 - val_loss: 0.0013 - val_mean_squared_error: 0.0013
Epoch 163/200
225/233 [===========================>..] - ETA: 0s - loss: 8.8486e-04 - mean_squared_error: 8.8486e-04
Epoch 00163: val_loss did not improve from 0.00129
233/233 [==============================] - 1s 5ms/step - loss: 8.8552e-04 - mean_squared_error: 8.8552e-04 - val_loss: 0.0013 - val_mean_squared_error: 0.0013
Epoch 164/200
228/233 [============================>.] - ETA: 0s - loss: 8.8561e-04 - mean_squared_error: 8.8561e-04
Epoch 00164: val_loss did not improve from 0.00129
233/233 [==============================] - 1s 4ms/step - loss: 8.8590e-04 - mean_squared_error: 8.8590e-04 - val_loss: 0.0013 - val_mean_squared_error: 0.0013
Epoch 165/200
222/233 [===========================>..] - ETA: 0s - loss: 8.9256e-04 - mean_squared_error: 8.9256e-04
Epoch 00165: val_loss did not improve from 0.00129
233/233 [==============================] - 1s 4ms/step - loss: 8.8696e-04 - mean_squared_error: 8.8696e-04 - val_loss: 0.0013 - val_mean_squared_error: 0.0013
Epoch 166/200
228/233 [============================>.] - ETA: 0s - loss: 8.8170e-04 - mean_squared_error: 8.8170e-04
Epoch 00166: val_loss did not improve from 0.00129
233/233 [==============================] - 1s 4ms/step - loss: 8.8528e-04 - mean_squared_error: 8.8528e-04 - val_loss: 0.0014 - val_mean_squared_error: 0.0014
Epoch 167/200
232/233 [============================>.] - ETA: 0s - loss: 8.8593e-04 - mean_squared_error: 8.8593e-04
Epoch 00167: val_loss did not improve from 0.00129
233/233 [==============================] - 1s 4ms/step - loss: 8.8735e-04 - mean_squared_error: 8.8735e-04 - val_loss: 0.0014 - val_mean_squared_error: 0.0014
Epoch 168/200
231/233 [============================>.] - ETA: 0s - loss: 8.8172e-04 - mean_squared_error: 8.8172e-04
Epoch 00168: val_loss did not improve from 0.00129
233/233 [==============================] - 1s 4ms/step - loss: 8.8390e-04 - mean_squared_error: 8.8390e-04 - val_loss: 0.0014 - val_mean_squared_error: 0.0014
Epoch 169/200
223/233 [===========================>..] - ETA: 0s - loss: 8.8895e-04 - mean_squared_error: 8.8895e-04
Epoch 00169: val_loss did not improve from 0.00129
233/233 [==============================] - 1s 4ms/step - loss: 8.8781e-04 - mean_squared_error: 8.8781e-04 - val_loss: 0.0014 - val_mean_squared_error: 0.0014
Epoch 170/200
229/233 [============================>.] - ETA: 0s - loss: 8.8238e-04 - mean_squared_error: 8.8238e-04
Epoch 00170: val_loss did not improve from 0.00129
233/233 [==============================] - 1s 4ms/step - loss: 8.8270e-04 - mean_squared_error: 8.8270e-04 - val_loss: 0.0014 - val_mean_squared_error: 0.0014
Epoch 171/200
228/233 [============================>.] - ETA: 0s - loss: 8.8040e-04 - mean_squared_error: 8.8040e-04
Epoch 00171: val_loss did not improve from 0.00129
233/233 [==============================] - 1s 4ms/step - loss: 8.8238e-04 - mean_squared_error: 8.8238e-04 - val_loss: 0.0013 - val_mean_squared_error: 0.0013
Epoch 172/200
231/233 [============================>.] - ETA: 0s - loss: 8.8182e-04 - mean_squared_error: 8.8182e-04
Epoch 00172: val_loss did not improve from 0.00129
233/233 [==============================] - 1s 4ms/step - loss: 8.8242e-04 - mean_squared_error: 8.8242e-04 - val_loss: 0.0013 - val_mean_squared_error: 0.0013
Epoch 173/200
232/233 [============================>.] - ETA: 0s - loss: 8.8351e-04 - mean_squared_error: 8.8351e-04
Epoch 00173: val_loss did not improve from 0.00129
233/233 [==============================] - 1s 5ms/step - loss: 8.8326e-04 - mean_squared_error: 8.8326e-04 - val_loss: 0.0014 - val_mean_squared_error: 0.0014
Epoch 174/200
230/233 [============================>.] - ETA: 0s - loss: 8.8316e-04 - mean_squared_error: 8.8316e-04
Epoch 00174: val_loss did not improve from 0.00129
233/233 [==============================] - 1s 4ms/step - loss: 8.8189e-04 - mean_squared_error: 8.8189e-04 - val_loss: 0.0014 - val_mean_squared_error: 0.0014
Epoch 175/200
222/233 [===========================>..] - ETA: 0s - loss: 8.8250e-04 - mean_squared_error: 8.8250e-04
Epoch 00175: val_loss did not improve from 0.00129
233/233 [==============================] - 1s 4ms/step - loss: 8.8162e-04 - mean_squared_error: 8.8162e-04 - val_loss: 0.0014 - val_mean_squared_error: 0.0014
Epoch 176/200
229/233 [============================>.] - ETA: 0s - loss: 8.7845e-04 - mean_squared_error: 8.7845e-04
Epoch 00176: val_loss did not improve from 0.00129
233/233 [==============================] - 1s 5ms/step - loss: 8.7964e-04 - mean_squared_error: 8.7964e-04 - val_loss: 0.0014 - val_mean_squared_error: 0.0014
Epoch 177/200
232/233 [============================>.] - ETA: 0s - loss: 8.7937e-04 - mean_squared_error: 8.7937e-04
Epoch 00177: val_loss did not improve from 0.00129
233/233 [==============================] - 1s 5ms/step - loss: 8.7949e-04 - mean_squared_error: 8.7949e-04 - val_loss: 0.0014 - val_mean_squared_error: 0.0014
Epoch 178/200
226/233 [============================>.] - ETA: 0s - loss: 8.8485e-04 - mean_squared_error: 8.8485e-04
Epoch 00178: val_loss did not improve from 0.00129
233/233 [==============================] - 1s 5ms/step - loss: 8.8368e-04 - mean_squared_error: 8.8368e-04 - val_loss: 0.0014 - val_mean_squared_error: 0.0014
Epoch 179/200
232/233 [============================>.] - ETA: 0s - loss: 8.7821e-04 - mean_squared_error: 8.7821e-04
Epoch 00179: val_loss did not improve from 0.00129
233/233 [==============================] - 1s 5ms/step - loss: 8.7842e-04 - mean_squared_error: 8.7842e-04 - val_loss: 0.0014 - val_mean_squared_error: 0.0014
Epoch 180/200
229/233 [============================>.] - ETA: 0s - loss: 8.7486e-04 - mean_squared_error: 8.7486e-04
Epoch 00180: val_loss did not improve from 0.00129
233/233 [==============================] - 1s 5ms/step - loss: 8.7706e-04 - mean_squared_error: 8.7706e-04 - val_loss: 0.0014 - val_mean_squared_error: 0.0014
Epoch 181/200
232/233 [============================>.] - ETA: 0s - loss: 8.7995e-04 - mean_squared_error: 8.7995e-04
Epoch 00181: val_loss did not improve from 0.00129
233/233 [==============================] - 1s 5ms/step - loss: 8.7940e-04 - mean_squared_error: 8.7940e-04 - val_loss: 0.0014 - val_mean_squared_error: 0.0014
Epoch 182/200
232/233 [============================>.] - ETA: 0s - loss: 8.7640e-04 - mean_squared_error: 8.7640e-04
Epoch 00182: val_loss did not improve from 0.00129
233/233 [==============================] - 1s 5ms/step - loss: 8.7757e-04 - mean_squared_error: 8.7757e-04 - val_loss: 0.0014 - val_mean_squared_error: 0.0014
Epoch 183/200
224/233 [===========================>..] - ETA: 0s - loss: 8.7359e-04 - mean_squared_error: 8.7359e-04
Epoch 00183: val_loss did not improve from 0.00129
233/233 [==============================] - 1s 4ms/step - loss: 8.7604e-04 - mean_squared_error: 8.7604e-04 - val_loss: 0.0014 - val_mean_squared_error: 0.0014
Epoch 184/200
228/233 [============================>.] - ETA: 0s - loss: 8.7622e-04 - mean_squared_error: 8.7622e-04
Epoch 00184: val_loss did not improve from 0.00129
233/233 [==============================] - 1s 5ms/step - loss: 8.7657e-04 - mean_squared_error: 8.7657e-04 - val_loss: 0.0014 - val_mean_squared_error: 0.0014
Epoch 185/200
232/233 [============================>.] - ETA: 0s - loss: 8.7531e-04 - mean_squared_error: 8.7531e-04
Epoch 00185: val_loss did not improve from 0.00129
233/233 [==============================] - 1s 4ms/step - loss: 8.7508e-04 - mean_squared_error: 8.7508e-04 - val_loss: 0.0014 - val_mean_squared_error: 0.0014
Epoch 186/200
223/233 [===========================>..] - ETA: 0s - loss: 8.7727e-04 - mean_squared_error: 8.7727e-04
Epoch 00186: val_loss did not improve from 0.00129
233/233 [==============================] - 1s 4ms/step - loss: 8.7676e-04 - mean_squared_error: 8.7676e-04 - val_loss: 0.0014 - val_mean_squared_error: 0.0014
Epoch 187/200
228/233 [============================>.] - ETA: 0s - loss: 8.7612e-04 - mean_squared_error: 8.7612e-04
Epoch 00187: val_loss did not improve from 0.00129
233/233 [==============================] - 1s 4ms/step - loss: 8.7689e-04 - mean_squared_error: 8.7689e-04 - val_loss: 0.0014 - val_mean_squared_error: 0.0014
Epoch 188/200
233/233 [==============================] - ETA: 0s - loss: 8.7383e-04 - mean_squared_error: 8.7383e-04
Epoch 00188: val_loss did not improve from 0.00129
233/233 [==============================] - 1s 5ms/step - loss: 8.7383e-04 - mean_squared_error: 8.7383e-04 - val_loss: 0.0014 - val_mean_squared_error: 0.0014
Epoch 189/200
225/233 [===========================>..] - ETA: 0s - loss: 8.7370e-04 - mean_squared_error: 8.7370e-04
Epoch 00189: val_loss did not improve from 0.00129
233/233 [==============================] - 1s 4ms/step - loss: 8.7309e-04 - mean_squared_error: 8.7309e-04 - val_loss: 0.0014 - val_mean_squared_error: 0.0014
Epoch 190/200
230/233 [============================>.] - ETA: 0s - loss: 8.7603e-04 - mean_squared_error: 8.7603e-04
Epoch 00190: val_loss did not improve from 0.00129
233/233 [==============================] - 1s 4ms/step - loss: 8.7483e-04 - mean_squared_error: 8.7483e-04 - val_loss: 0.0014 - val_mean_squared_error: 0.0014
Epoch 191/200
226/233 [============================>.] - ETA: 0s - loss: 8.7606e-04 - mean_squared_error: 8.7606e-04
Epoch 00191: val_loss did not improve from 0.00129
233/233 [==============================] - 1s 4ms/step - loss: 8.7436e-04 - mean_squared_error: 8.7436e-04 - val_loss: 0.0014 - val_mean_squared_error: 0.0014
Epoch 192/200
228/233 [============================>.] - ETA: 0s - loss: 8.7089e-04 - mean_squared_error: 8.7089e-04
Epoch 00192: val_loss did not improve from 0.00129
233/233 [==============================] - 1s 4ms/step - loss: 8.7152e-04 - mean_squared_error: 8.7152e-04 - val_loss: 0.0014 - val_mean_squared_error: 0.0014
Epoch 193/200
230/233 [============================>.] - ETA: 0s - loss: 8.7423e-04 - mean_squared_error: 8.7423e-04
Epoch 00193: val_loss did not improve from 0.00129
233/233 [==============================] - 1s 4ms/step - loss: 8.7294e-04 - mean_squared_error: 8.7294e-04 - val_loss: 0.0014 - val_mean_squared_error: 0.0014
Epoch 194/200
233/233 [==============================] - ETA: 0s - loss: 8.7195e-04 - mean_squared_error: 8.7194e-04
Epoch 00194: val_loss did not improve from 0.00129
233/233 [==============================] - 1s 4ms/step - loss: 8.7195e-04 - mean_squared_error: 8.7194e-04 - val_loss: 0.0014 - val_mean_squared_error: 0.0014
Epoch 195/200
226/233 [============================>.] - ETA: 0s - loss: 8.6990e-04 - mean_squared_error: 8.6990e-04
Epoch 00195: val_loss did not improve from 0.00129
233/233 [==============================] - 1s 4ms/step - loss: 8.7065e-04 - mean_squared_error: 8.7065e-04 - val_loss: 0.0014 - val_mean_squared_error: 0.0014
Epoch 196/200
231/233 [============================>.] - ETA: 0s - loss: 8.7252e-04 - mean_squared_error: 8.7252e-04
Epoch 00196: val_loss did not improve from 0.00129
233/233 [==============================] - 1s 5ms/step - loss: 8.7195e-04 - mean_squared_error: 8.7195e-04 - val_loss: 0.0014 - val_mean_squared_error: 0.0014
Epoch 197/200
223/233 [===========================>..] - ETA: 0s - loss: 8.7491e-04 - mean_squared_error: 8.7491e-04
Epoch 00197: val_loss did not improve from 0.00129
233/233 [==============================] - 1s 4ms/step - loss: 8.7254e-04 - mean_squared_error: 8.7254e-04 - val_loss: 0.0014 - val_mean_squared_error: 0.0014
Epoch 198/200
225/233 [===========================>..] - ETA: 0s - loss: 8.7172e-04 - mean_squared_error: 8.7172e-04
Epoch 00198: val_loss did not improve from 0.00129
233/233 [==============================] - 1s 5ms/step - loss: 8.6846e-04 - mean_squared_error: 8.6846e-04 - val_loss: 0.0014 - val_mean_squared_error: 0.0014
Epoch 199/200
231/233 [============================>.] - ETA: 0s - loss: 8.6738e-04 - mean_squared_error: 8.6738e-04
Epoch 00199: val_loss did not improve from 0.00129
233/233 [==============================] - 1s 4ms/step - loss: 8.6801e-04 - mean_squared_error: 8.6801e-04 - val_loss: 0.0014 - val_mean_squared_error: 0.0014
Epoch 200/200
224/233 [===========================>..] - ETA: 0s - loss: 8.6860e-04 - mean_squared_error: 8.6860e-04
Epoch 00200: val_loss did not improve from 0.00129
233/233 [==============================] - 1s 4ms/step - loss: 8.7148e-04 - mean_squared_error: 8.7148e-04 - val_loss: 0.0014 - val_mean_squared_error: 0.0014
<tensorflow.python.keras.callbacks.History at 0x7fecf0f92c10>

Finally, Training is done.

Predict image from model

Let's try it and see its work.

fig, ax = plt.subplots(figsize=(15, 10))
ax.imshow(Image.open('./dataset/SRCNN_dataset/Test/Set14/barbara.bmp'))
ax.title.set_text("Original Image")
plt.show()

Then we need to make distorted image by resizing down and up.

try:
    os.listdir('./dataset/SRCNN_dataset/output')
except:
    os.mkdir('./dataset/SRCNN_dataset/output')

target = cv2.imread('./dataset/SRCNN_dataset/Test/Set14/barbara.bmp', cv2.IMREAD_COLOR)
target = cv2.cvtColor(target, cv2.COLOR_BGR2YCrCb)
shape = target.shape

# Resize down by scale of 2
Y_img = cv2.resize(target[:, :, 0], (int(shape[1] / 2), int(shape[0] / 2)), cv2.INTER_CUBIC)

# Resize up to orignal image
Y_img = cv2.resize(Y_img, (shape[1], shape[0]), cv2.INTER_CUBIC)
target[:, :, 0] = Y_img
target = cv2.cvtColor(target, cv2.COLOR_YCrCb2BGR)
cv2.imwrite('./dataset/SRCNN_dataset/output/input.jpg', target)

fig, ax = plt.subplots(figsize=(15, 10))
ax.imshow(Image.open('./dataset/SRCNN_dataset/output/input.jpg'))
ax.title.set_text("Distorted Image")
plt.show()
Y = np.zeros((1, target.shape[0], target.shape[1], 1), dtype=np.float32)
# Normalize
Y[0, :, :, 0] = Y_img.astype(np.float32) / 255.

# Predict
pre = srcnn_model.predict(Y, batch_size=1) * 255.

# Post process output
pre[pre[:] > 255] = 255
pre[pre[:] < 0] = 0
pre = pre.astype(np.uint8)

# Copy y channel back to image and convert to BGR
output = cv2.cvtColor(target, cv2.COLOR_BGR2YCrCb)
output[6: -6, 6: -6, 0] = pre[0, :, :, 0]
output = cv2.cvtColor(output, cv2.COLOR_YCrCb2BGR)

# Save image
cv2.imwrite('./dataset/SRCNN_dataset/output/output.jpg', output)

fig, ax = plt.subplots(figsize=(15, 10))
ax.imshow(Image.open('./dataset/SRCNN_dataset/output/output.jpg'))
ax.title.set_text("Predicted Image")
plt.show()

We can compare those images simultaneously.

fig, ax = plt.subplots(1, 3, figsize=(15, 10))
ax[0].imshow(Image.open('./dataset/SRCNN_dataset/Test/Set14/barbara.bmp'))
ax[0].title.set_text("Original Image")

ax[1].imshow(Image.open('./dataset/SRCNN_dataset/output/input.jpg'))
ax[1].title.set_text("Distorted Image")

ax[2].imshow(Image.open('./dataset/SRCNN_dataset/output/output.jpg'))
ax[2].title.set_text("Predicted Image")
fig, ax = plt.subplots(1, 2, figsize=(15, 10))
ax[0].imshow(Image.open('./dataset/SRCNN_dataset/output/input.jpg'))
ax[0].title.set_text("Distorted Image")

ax[1].imshow(Image.open('./dataset/SRCNN_dataset/output/output.jpg'))
ax[1].title.set_text("Predicted Image")

Here, we can use PSNR and SSIM metrics for comparison. Of course, we need to compare each images with original image.

original = cv2.imread('./dataset/SRCNN_dataset/Test/Set14/barbara.bmp')
distorted = cv2.imread('./dataset/SRCNN_dataset/output/input.jpg')
predicted = cv2.imread('./dataset/SRCNN_dataset/output/output.jpg')
metrics = compare_images(original, distorted)
print("Metrics for original and distorted image")
print("PSNR: {}".format(metrics[0]))
print("MSE: {}".format(metrics[1]))
print("SSIM: {}".format(metrics[2]))
Metrics for original and distorted image
PSNR: 25.804217868496153
MSE: 512.6014274691358
SSIM: 0.7967242506776445
metrics = compare_images(original, predicted)
print("Metrics for original and predicted image")
print("PSNR: {}".format(metrics[0]))
print("MSE: {}".format(metrics[1]))
print("SSIM: {}".format(metrics[2]))
Metrics for original and predicted image
PSNR: 26.55866930042204
MSE: 430.8585262345679
SSIM: 0.847115991819353

Summary

We can see that Peak Signal to Noise Ratio of predicted image is higher than that of distorted image, and same in Structural Similarity. As a result, it concludes that SR-CNN model can enhance the image quality, and the predicted output is more similar with original image.